// Created by WXX on 2021/11/23 9:37
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

/**
 * 执行用时：4 ms, 在所有 C++ 提交中击败了75.89%的用户
 * 内存消耗：6.8 MB, 在所有 C++ 提交中击败了65.87%的用户
 */
class Solution {
public:
    bool buddyStrings(string a, string b) {
        if (a.size() != b.size()) return false;

        if (a == b) {
            unordered_map<char, int> cnt;
            for (auto c: a)
                if ( ++ cnt[c] > 1)
                    return true;
            return false;
        }

        int cnt = 0;
        int pos[2], index = 0;
        for (int i = 0; i < a.size(); i++)
            if (a[i] != b[i]) {
                if (++cnt >= 3) return false;
                pos[index++] = i;
            }
        return a[pos[0]] == b[pos[1]] && a[pos[1]] == b[pos[0]];
    }
};

int main() {

    cout << Solution().buddyStrings("ab", "ba") << endl;  // true
    cout << Solution().buddyStrings("aa", "aa") << endl;  // true
    cout << Solution().buddyStrings("ab", "ab") << endl;  // false

    return 0;
}
